import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

// 如果你使用的 Vite，你可以使用 unplugin-vue-components 来进行按需加载。
// 但是此插件无法处理非组件模块，如 message，这种组件需要手动加载：
import Components from 'unplugin-vue-components/vite'
import { AntDesignVueResolver } from 'unplugin-vue-components/resolvers'

// 更快的构建速度，首次加载优化
import OptimizationPersist from 'vite-plugin-optimize-persist'
import PkgConfig from 'vite-plugin-package-config'

// 打包压缩
import viteCompression from 'vite-plugin-compression'

// markdown
import prismjs from 'vite-plugin-prismjs';

// https://vitejs.dev/config/
export default defineConfig({
  assetsDir: "static",
  devServer: {
    port: 3000  // 端口
  },
  plugins: [
    vue(),
    Components({
      resolvers: [
        AntDesignVueResolver(),
      ],
    }),
    PkgConfig(),
    OptimizationPersist(),
    viteCompression({
      verbose: true,
      disable: false,
      threshold: 10240,
      algorithm: 'gzip',
      ext: '.gz',
    }),
    prismjs({
      languages: ['json','js','bash','xml-doc'],
    }),
  ],
  build:{
    // 文件超大警告
    chunkSizeWarningLimit: 1500,
    minify: 'terser',
    // 压缩大型输出文件可能会很慢，因此禁用该功能可能会提高大型项目的构建性能。
    brotliSize: false,
    rollupOptions: {
      output: {
        // 静态资源文件分拆
        chunkFileNames: 'static/js/[name]-[hash].js',
        entryFileNames: 'static/js/[name]-[hash].js',
        assetFileNames: 'static/[ext]/[name]-[hash].[ext]',
        // 超大资源拆分
        manualChunks(id) {
          if (id.includes('node_modules')) {
            return id.toString().split('node_modules/')[1].split('/')[0].toString();
          }
        },
      }
    },
    // 清除console和debugger
    terserOptions: {
      compress: {
        drop_console: true
      },
    },
  },
  server: {
    port: 4000
  }
})
